package kgame5.kio.ksnake {
/**
蛇的节点，表示每一个加载的节点
 */
import kgame5.kutil.T;

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;

public class SnakeNode {
	//___________________Property________________________
	private var master:QueueLoader;
	public var idx:int;
	public var bFinished:Boolean=false;//加载完了，不管是成功还是是失败
	public var bOK:Boolean=false;//是否加载成功
	public var sUrl:String="";//要就加载的东西的地址
	public var loader:Loader;
	public var tipText:String="";
	//_____________________Method_______________________
	public function SnakeNode(p_master:QueueLoader,p_url:String,p_idx:int){
		T.p("new SnakeNode",p_url,p_idx);
		master=p_master;
		
		sUrl=p_url;
		idx=p_idx;
	}
	
	public function toString():String{
		return ("idx:"+idx+": isFindeshed:"+bFinished+" isOK:"+bOK);
	}
	
	//--------Handler-----------
	private function openH(e:Event):void{
		//T.p("openH",idx);
	}
	private function httpH(e:HTTPStatusEvent):void{
	}
	private function pH(e:ProgressEvent):void{
		////T.p(idx,"ph:",e.bytesLoaded,e.bytesTotal);
		master.dispatchEvent(e);
	}
	private function ioerrorH(e:IOErrorEvent):void{
		//T.p("ioerrorH",idx);
		bFinished=true;
		bOK=false;
		this.master.onNode_LoadFinished(this);
	}
	private function initH(e:Event):void{
	}
	private function cH(e:Event):void{
		T.p("--cH",idx);
		bFinished=true;
		bOK=true;
		this.master.onNode_LoadFinished(this);
	}

	public function Start():void{
		//T.p("SnakeNode.Start",idx,sUrl);
		loader=new Loader();//这样每次再被load的时候自己的contertLoaderInfo就不会去通知以前注册的了
		
		loader.contentLoaderInfo.addEventListener(Event.OPEN, openH);
		loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpH);
		loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, pH);
		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioerrorH);
		loader.contentLoaderInfo.addEventListener(Event.INIT, initH);
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE,cH);
			
		//如果已经加载完了也没多大关系，因为保存在ie缓存里？
		//
		//~~如果是使用 Loader.load() 方法下载 SWF 文件，也尽量不要将 checkPolicyFile 设置为 true。
		// 这是因为 SWF 到 SWF 的权限不是由策略文件控制的，而是由 Security.allowDomain() 方法控制的，
		//因此在加载 SWF 文件时 checkPolicyFile 不起任何作用。 在这种情况下不必再检查是否存在策略文件，
		//因为这样会延迟 SWF 文件的下载
		var lc:LoaderContext=new LoaderContext(false, this.master._aimAppDomain);
		//给他一个空的applicationDomain,这样不会和主类有冲突
		loader.load(new URLRequest(sUrl),lc);	
		/*
		if(this.bFinished){//如果已经加载完毕了
			if(bOK){
				cH(null);
			}else{
				ioerrorH(null);
			}
			
		}else{//如果没加载完毕
			loader.load(new URLRequest(sUrl));
			loader.contentLoaderInfo.addEventListener(Event.OPEN, openH);
			loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpH);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, pH);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioerrorH);
			loader.contentLoaderInfo.addEventListener(Event.INIT, initH);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,cH);
		}
		//*/
	}
	public function Stop():void{
		////T.p("SnakeNode.Stop");
		if(loader!=null){
			try{
				loader.close();
			}catch(e:Error){
			}
			if(loader.loaderInfo!=null){
				////T.p("删除监听器");
				loader.contentLoaderInfo.removeEventListener(Event.OPEN, openH);
				loader.contentLoaderInfo.removeEventListener(HTTPStatusEvent.HTTP_STATUS,httpH);
				loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, pH);
				loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioerrorH);
				loader.contentLoaderInfo.removeEventListener(Event.INIT, initH);
				loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,cH);
			}else{
				////T.p("contentLoaderInfo是是空呢");
			}
		}
	}
}//end of class
}
